package br.ucb.cesbdao.utilBeans;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;

import br.ucb.cesbdao.beans.Acesso;
import br.ucb.cesbdao.beans.Trabalhador;
import br.ucb.cesbdao.enuns.EnumMensagens;
import br.ucb.cesbdao.janelas.JanelaAFI;
import br.ucb.cesbdao.model.AcessoModel;
import br.ucb.cesbdao.model.TrabalhadorModel;
import br.ucb.cesbdao.model.impl.AcessoModelImpl;
import br.ucb.cesbdao.model.impl.TrabalhadorModelImpl;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.servicos.Servicos;
import br.ucb.cesbdao.servicos.Validadores;
import br.ucb.cesbdao.visao.Visao;



public class TrabalhadorUtil {
	public static Trabalhador preencheTrabalhador(ResultSet rs){
		Trabalhador atendente = new Trabalhador();
		try {
			atendente = new Trabalhador(
					rs.getInt("chavePessoa"),
					rs.getString("nomePessoa"),
					rs.getString("sexo").charAt(0),
					rs.getString("status").charAt(0),
					rs.getInt("socio"), 
					rs.getString("cpf"),
					rs.getString("dtNascer"), 
					rs.getString("telefones"),
					rs.getString("email"),
					rs.getString("endereco"),
					rs.getString("tipo"));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return atendente;

	}

	public static ArrayList<String> pegaTelefone(String telefone) {
		ArrayList<String> tels = new ArrayList<String>();
		if(telefone == null || telefone.trim().isEmpty())
			return tels;
		String[] telefones = telefone.split("  ");
		for (String tel : telefones) {
			if(tel.length() == 14)
				tels.add(tel);
		}
		return tels;
	}

	public static boolean alteraTrabalhador(Integer id, String nome, String endereco, String email,
			String cod, String data_nasc, String tel1, String tel2,
			String tel3, String tel4, String tel5, String tel6, JRadioButton sexo) {

		if(!validaTrabalhador(nome,endereco,email,cod,data_nasc,tel1,tel2,tel3,tel4,tel5,tel6)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_ALTERAÇÂO_INVALIDA.getMensagem(),"Aviso");
			return false;
		}
		StringBuilder telefone = criaTelefones(tel1,tel2,tel3,tel4,tel5,tel6);
		Trabalhador atendente = new Trabalhador(id,
				nome.toUpperCase(),
				sexo.isSelected() ? 'M' : 'F',
						(Integer.parseInt(cod)), 
						DateUtil.formatDateIn(data_nasc), 
						telefone.toString(), 
						email.trim(),
						endereco,
						'A'
				);
		TrabalhadorModel model = new TrabalhadorModelImpl();
		model.alteraTrabalhador(atendente);
		return true;
	}

	private static StringBuilder criaTelefones(String tel1, String tel2,
			String tel3, String tel4, String tel5, String tel6) {
		StringBuilder telefone = new StringBuilder();
		telefone.append(tel1).append("  ");
		telefone.append(tel2).append("  ");
		telefone.append(tel3).append("  ");
		telefone.append(tel4).append("  ");
		telefone.append(tel5).append("  ");
		telefone.append(tel6);
		return telefone;
	}

	private static Boolean validaTrabalhador(String nome, String endereco,
			String email, String cod, String data_nasc, String tel1,
			String tel2, String tel3, String tel4, String tel5, String tel6) {
		Boolean flag = true;
		if(!Validadores.validaString(nome))
			flag = false;
		if(!Validadores.validaString(endereco) && !Validadores.validaStringAltera(endereco))
			flag = false;
		if(!Validadores.validaEmail(email) && !Validadores.validaStringAltera(email))
			flag = false;
		if(!Validadores.validaString(cod))
			flag = false;
		if(!Validadores.validaData(data_nasc))
			flag = false;
		if(!Validadores.validaTelefone(tel1))
			flag = false;
		if(!Validadores.validaTelefone(tel2))
			flag = false;
		if(!Validadores.validaTelefone(tel3))
			flag = false;
		if(!Validadores.validaTelefone(tel4))
			flag = false;
		if(!Validadores.validaTelefone(tel5))
			flag = false;
		if(!Validadores.validaTelefone(tel6))
			flag = false;
		return flag;

	}

	@SuppressWarnings("deprecation")
	public static boolean alteraSenha(JPasswordField txtOldSenha,
			JPasswordField txtNewSenha, JPasswordField txtConSenha,
			JLabel lblErroOldSenha, JLabel lblforcaSenha, JLabel lblErroConSenha) {

		Trabalhador atendente = JanelaAFI.getTrabalhador();
		Acesso acesso = Acesso.getAcesso(atendente.getCpf()); 


		if(!Servicos.verificaOldSenha(txtOldSenha,acesso)){
			lblErroOldSenha.setText("Senha Invalida");
			return false;
		}else
			lblErroOldSenha.setText("");

		if(!Servicos.verificaSenhaIgual(txtNewSenha.getText(),txtConSenha.getText())){
			lblErroConSenha.setText("Senha Não Correspondente");
			return false;
		}
		else
			lblErroConSenha.setText("");

		if(!Servicos.validaSenha(txtNewSenha.getText())){
			lblforcaSenha.setText("Senha invalida");
			return false;
		}
		else
			Servicos.CheckPasswordStrength(txtNewSenha.getText(),lblforcaSenha);

		acesso.setSenha(txtNewSenha.getText());
		AcessoModel model = new AcessoModelImpl();
		model.alteraAcesso(acesso);
		Visao.showMessage(EnumMensagens.MSG_CONFIRMACAO_ALTERACAO_SENHA_SUCESSO.getMensagem(),"Aviso");
		return true;

	}



}
